var createError = require("http-errors");

var express = require("express");

var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");

var app = express();

// view engine setup 配置使用模板引擎 ejs
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

let cookieSession = require("cookie-session");
app.use(
  cookieSession({
    keys: ["key1", "key2"], //对session  相关的cookie 进行签名
    maxAge: 20 * 60 * 1000, // 设置 session 的有效时间，单位毫秒
  })
);

// 获取路由配置
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
var articleRouter = require("./routes/article");
// 挂载路由配置
app.use("/", indexRouter);
// localhost:3000/users -路径-- 这种请求交给usersRouter 这个路由去处理
app.use("/users", usersRouter);
app.use("/article", articleRouter);

// catch 404 and forward to error handler
// 监听到  除去上面路由以外的所有的路由
app.use(function (req, res, next) {
  console.log("catch 404");
  // next express 中间件的内置函数，如果调用next 会这个请求交个下一个中间件（函数）处理
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;
